package day0401;

import java.util.*;

public class BingChaJI35 {
    /**
     * 题目描述: 贪心
     * 35 图像物体的边界 并查集
     * <p>
     * 给定一个二维数组M行N列，二维数组里的数字代表图片的像素，为了简化问题，仅包含像素1和5两种像素每种像素代表一个物体，2个物体相邻的格子为边界
     * ，求像素1代表的物体的边界个数。象素1代表的物体的边界指与像素5相邻的像素1的格子，边界相邻的属于同一个边界，相邻需要考虑8个方向(上，下，左，
     * 右，左上，左下，右上，右下)。
     * <p>
     * 其他约束
     * <p>
     * 地图规格约束为:
     * <p>
     * 0<M<100
     * <p>
     * 0<N<100
     * <p>
     * 1)如下图，与像素5的格子相邻的像素1的格子(0,0)、(0,1)、(0,2)、(1,0)、(1,2)、(2,0)、(2,1)、(2,2)、(4,4)、(4,5)、(5,4)为边界，
     * 另(0,0)、(0,1)、(0,2)、(1,0)、(1,2)、(2,0)、(2,1)、(2,2)相邻，为1个边界，(4,4)、(4,5)、(5,4)相邻，为1个边界，
     * 所以下图边界个数为2。
     * <p>
     * 输入描述
     * <p>
     * 第一行，行数 M，列数 N
     * <p>
     * 第二行开始，是 M 行 N 列的像素的二维数组，仅包含像素 1 和 5
     * <p>
     * 输出描述
     * <p>
     * 像素 1 代表的物体的边界个数。如果没有边界输出 0 (比如只存在像素 1，或者只存在像素 5)
     * <p>
     * 用例
     * https://zhuanlan.zhihu.com/p/645312512
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] mn = sc.nextLine().split(" ");
        int m = Integer.parseInt(mn[0]);
        int n = Integer.parseInt(mn[1]);
        int[][] arr = new int[m][n];
        int fiveNum = 0;
        List<List<Integer>> fiveList = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            int[] line = Arrays.stream(sc.nextLine()
                            .split(" "))
                    .map(Integer::parseInt)
                    .mapToInt(Integer::intValue)
                    .toArray();
            for (int j = 0; j < n; j++) {
                arr[i][j] = line[j];
                if (arr[i][j] == 5) {
                    fiveNum++;
                    fiveList.add(new ArrayList<>(Arrays.asList(i, j)));
                }
            }
        }
        for (int i = 0; i < fiveList.size() - 1; i++) {
            for (int j = 1; j < fiveList.size(); j++) {
                int x1 = fiveList.get(i).get(0);
                int y1 = fiveList.get(i).get(1);
                int x2 = fiveList.get(j).get(0);
                int y2 = fiveList.get(j).get(1);
                if (Math.abs(x1 - x2) <= 3 && Math.abs(y1 - y2) <= 3) {
                    fiveNum--;
                }
            }
        }
        System.out.println(fiveNum);
    }
}

